package cn.wubo.dynamic.schedule.controller;

import cn.wubo.dynamic.schedule.entity.TaskRecord;
import cn.wubo.dynamic.schedule.result.Result;
import cn.wubo.dynamic.schedule.service.PageVO;
import cn.wubo.dynamic.schedule.service.TaskService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/task")
public class TaskController {

    @Resource
    TaskService taskService;

    /**
     * 获取任务记录列表
     * @param taskVO 任务信息
     * @return 返回任务记录列表结果对象，包括总数和数据列表
     */
    @PostMapping("list")
    public Result<List<TaskRecordVO>> list(@RequestBody TaskVO taskVO) {
        PageVO<TaskRecordVO> pageVO = taskService.page(taskVO);
        return Result.success(pageVO.getCount(), pageVO.getData());
    }


    /**
     * 保存任务记录
     *
     * @param taskRecord 任务记录对象
     * @return 保存结果，包含任务记录id
     */
    @PostMapping("save")
    public Result<Integer> save(@RequestBody TaskRecord taskRecord) {
        return Result.success(taskService.save(taskRecord));
    }


    /**
     * 根据ID删除任务
     * @param id 任务ID
     * @return 删除结果
     */
    @GetMapping("delete")
    public Result<Integer> delete(@RequestParam String id) {
        return Result.success(taskService.delete(id));
    }


    /**
     * 根据id获取任务记录
     * @param id 任务记录的id
     * @return 返回任务记录
     */
    @GetMapping("get")
    public Result<TaskRecord> get(@RequestParam String id) {
        return Result.success(taskService.get(id));
    }


    /**
     * 启动任务。
     *
     * @param id 任务ID
     * @return 如果任务启动成功返回true，否则返回false
     */
    @GetMapping("start")
    public Result<Boolean> start(@RequestParam String id) {
        try {
            return Result.success(taskService.start(id));
        } catch (Exception e) {
            return Result.fail(e);
        }
    }


    /**
     * 单个执行任务。
     *
     * @param id 任务ID
     * @return 执行结果
     */
    @GetMapping("runOnce")
    public Result<Boolean> runOnce(@RequestParam String id) {
        try {
            return Result.success(taskService.runOnce(id));
        } catch (Exception e) {
            return Result.fail(e);
        }
    }


    /**
     * 停止任务方法
     * @param id 任务ID
     * @return 停止任务结果
     */
    @GetMapping("stop")
    public Result<Boolean> stop(@RequestParam String id) {
        try {
            return Result.success(taskService.stop(id));
        } catch (Exception e) {
            return Result.fail(e);
        }
    }

}
